import 'package:get/get.dart';
import 'package:tencent_cloud_chat_sdk/enum/conversation_type.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation_result.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart';
import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';

class ConversationListLogic extends GetxController {
  String nextSeq = "0";
  int pageSize = 20;
  int listType = 0;
  List<V2TimConversation?>? datas;

  Future<List<V2TimConversation?>?> getData() async {
    //获取会话列表
    V2TimValueCallback<V2TimConversationResult> getConversationListRes =
        await TencentImSDKPlugin.v2TIMManager
            .getConversationManager()
            .getConversationList(
                count: 100, //分页拉取的个数，一次分页拉取不宜太多，会影响拉取的速度，建议每次拉取 100 个会话
                nextSeq: nextSeq //分页拉取的游标，第一次默认取传 0，后续分页拉传上一次分页拉取成功回调里的 nextSeq
                );
    List<V2TimConversation?>? data = getConversationListRes
        .data?.conversationList
        ?.where((item) => item?.type == ConversationType.V2TIM_C2C)
        .toList();

    if (getConversationListRes.code == 0) {
      if (nextSeq == "0") {
        datas = data!;
      } else {
        datas?.addAll(data!);
      }
      nextSeq = getConversationListRes.data!.nextSeq!; //后续分页拉取的游标
    }

    return datas;
  }

  ///代码提示
  getList() async {
    //获取会话列表
    V2TimValueCallback<V2TimConversationResult> getConversationListRes =
        await TencentImSDKPlugin.v2TIMManager
            .getConversationManager()
            .getConversationList(
                count: 100, //分页拉取的个数，一次分页拉取不宜太多，会影响拉取的速度，建议每次拉取 100 个会话
                nextSeq: "0" //分页拉取的游标，第一次默认取传 0，后续分页拉传上一次分页拉取成功回调里的 nextSeq
                );
    if (getConversationListRes.code == 0) {
      //拉取成功
      bool? isFinished = getConversationListRes.data?.isFinished; //是否拉取完
      String? nextSeq = getConversationListRes.data?.nextSeq; //后续分页拉取的游标
      List<V2TimConversation?>? conversationList =
          getConversationListRes.data?.conversationList; //此次拉取到的消息列表
      //如果没有拉取完，使用返回的nextSeq继续拉取直到isFinished为true
      if (!isFinished!) {
        V2TimValueCallback<V2TimConversationResult> nextConversationListRes =
            await TencentImSDKPlugin.v2TIMManager
                .getConversationManager()
                .getConversationList(
                    count: 100,
                    nextSeq: nextSeq = "0"); //使用返回的nextSeq继续拉取直到isFinished为true
      }

      getConversationListRes.data?.conversationList?.forEach((element) {
        element
            ?.conversationID; //会话唯一 ID，如果是单聊，组成方式为 c2c_userID；如果是群聊，组成方式为 group_groupID。
        element?.draftText; //草稿信息
        element?.draftTimestamp; //草稿编辑时间，草稿设置的时候自动生成。
        element?.faceUrl; //会话展示头像，群聊头像：群头像；单聊头像：对方头像。
        element?.groupAtInfoList; //群会话 @ 信息列表，通常用于展示 “有人@我” 或 “@所有人” 这两种提醒状态。
        element?.groupID; //当前群聊 ID，如果会话类型为群聊，groupID 会存储当前群的群 ID，否则为 null。
        element?.groupType; //当前群聊类型，如果会话类型为群聊，groupType 为当前群类型，否则为 null。
        element?.isPinned; //会话是否置顶
        element?.lastMessage; //会话最后一条消息
        element?.orderkey; //会话排序字段
        element?.recvOpt; //消息接收选项
        element
            ?.showName; //会话展示名称，群聊会话名称优先级：群名称 > 群 ID；单聊会话名称优先级：对方好友备注 > 对方昵称 > 对方的 userID。
        element?.type; //会话类型，分为 C2C（单聊）和 Group（群聊）。
        element?.unreadCount; //会话未读消息数，直播群（AVChatRoom）不支持未读计数，默认为 0。
        element?.userID; //对方用户 ID，如果会话类型为单聊，userID 会存储对方的用户 ID，否则为 null。
      });
    }
  }
}
